package com.xingzhi.shortvideosharingplatform.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.xingzhi.shortvideosharingplatform.model.SystemNotification;

public interface SystemNotificationService extends IService<SystemNotification> {
    
    /**
     * 发送点赞通知
     * @param userId 接收通知的用户ID(视频作者)
     * @param likeUserId 点赞用户ID
     * @param videoId 被点赞的视频ID
     * @return 是否发送成功
     */
    boolean sendLikeNotification(Long userId, Long likeUserId, Long videoId);
    
    /**
     * 发送收藏通知
     * @param userId 接收通知的用户ID(视频作者)
     * @param favoriteUserId 收藏用户ID
     * @param videoId 被收藏的视频ID
     * @return 是否发送成功
     */
    boolean sendFavoriteNotification(Long userId, Long favoriteUserId, Long videoId);
    
    /**
     * 发送关注通知
     * @param userId 接收通知的用户ID(被关注者)
     * @param followUserId 关注用户ID
     * @return 是否发送成功
     */
    boolean sendFollowNotification(Long userId, Long followUserId);
    
    /**
     * 标记通知为已读
     * @param notificationId 通知ID
     * @param userId 用户ID
     * @return 是否成功
     */
    boolean markAsRead(Long notificationId, Long userId);
    
    /**
     * 获取用户未读通知数量
     * @param userId 用户ID
     * @return 未读通知数量
     */
    int getUnreadCount(Long userId);

    /**
     * 发送评论通知
     * @param receiverId 接收者ID（视频所有者）
     * @param senderId 发送者ID（评论者）
     * @param videoId 视频ID
     * @param commentId 评论ID
     * @param content 评论内容
     */
    void sendCommentNotification(Long receiverId, Long senderId, Long videoId, Long commentId, String content);

    /**
     * 发送回复通知
     * @param receiverId 接收者ID（被回复者）
     * @param senderId 发送者ID（回复者）
     * @param videoId 视频ID
     * @param commentId 评论ID
     * @param content 回复内容
     */
    void sendReplyNotification(Long receiverId, Long senderId, Long videoId, Long commentId, String content);

    /**
     * 发送@通知
     * @param receiverId 接收者ID（被@的用户）
     * @param senderId 发送者ID（@的人）
     * @param videoId 视频ID
     * @param commentId 评论ID
     * @param content 评论内容
     */
    void sendMentionNotification(Long receiverId, Long senderId, Long videoId, Long commentId, String content);
    
    /**
     * 发送评论被点赞通知
     * @param receiverId 接收者ID（评论所有者）
     * @param senderId 发送者ID（点赞用户）
     * @param videoId 视频ID
     * @param commentId 评论ID
     * @param content 评论内容
     */
    void sendCommentLikedNotification(Long receiverId, Long senderId, Long videoId, Long commentId, String content);
} 